작성 일자 : 2026-02-18기획

기존에 제작한 가사 검색기의 화면이다. 1차로 곡 제목을 검색하고 그에 맞는 가사가 나오면 송폼을 직접 입력하고 가사 또한 직접 옮겨 넣어야한다.
하지만 실제 현장의 작업 방식에는 비효율적인 부분이 있기 때문에 다른 방식도 가능할 것 같아서 기획을 진행하였다.
현장의 작업 방식
- 인도자로부터 악보를 제공받음
- 악보는 3
4곡 정도가 들어있음. (34 페이지)- 예외 상황 ) 곡하나가 두페이지로 되어있는 경우 있음.
- 악보 상단에는 송폼이 작성되어 있음.
- 송폼은 A, B, C 와 같은 형태로 작성되어 있음.
- 예외 상황 ) 종종 C’, A1, A2 등도 나오는 경우가 있음.
- 가사 제작팀은 이 악보를 참고하여 한곡 씩 작업 중임.
- 악보는 3
AS-IS → TO-BE
악보를 켜두고 한 곡씩 작업하는 방식
- PDF, JPG를 넣으면 송폼과 그에 맞는 가사를 직접 옮겨주는 방식
설계
화면 설계
페이지 내 최상단에 파일 선택 버튼 하나 추가.
파일은 pdf, jpg, png 형식으로 제한을 둠.
파싱을 진행하면 곡 개수에 따라 박스를 생성.
- 곡 개수는 1~5개로 둘 예정
파싱해서 나와야하는 정보.
- 곡 제목
- 송폼
- (자동) 송폼에 들어가는 파트
- 송폼에 들어가는 파트별 가사 앞 10글자
필요 기술
- openai api 사용 예정.
핵심
이미지를 파싱해서 나와야하는 정보를 어떤 형태로 담아서 옮길 것인가? json? → 중간중간 디버깅이 되려나? langgraph? → 현재 상태, 송폼 파트 이런거로 나눠서?
랭그래프를 쓴다면 내가 사용할 분기들
- 곡 개수가 몇개인지? 1~5개? 그런데 랭그래프 쓰기엔 프로젝트가 너무 가볍다.
JSON으로 조금 정리하면서 진행을 해야할 듯함.
UI는 페이지 페이지에 몰아 넣고 service 내부 function에서 기능들을 다듬어서 넣어야할 것으로 생각됨.
구현 로드맵
- 1. 파일 선택 기능을 통한 PDF, JPG, PNG 파일 업로드
- 2. 업로드된 파일을 바탕으로 OPENAI API 사용
- 2-1. 어떤 형식으로 답변을 받을 것인가? → JSON이라고 임시로 정함
- 2-1-1. JSON으로 답변 형태를 고정
- 2-1-2. JSON 형태 구상
- 2-1-3. 목적에 맞는 정확한 프롬프트 --- 여기까지 st.write로 JSON 형태가 안정적으로 나오는지 확인 ---
- 2-1. 어떤 형식으로 답변을 받을 것인가? → JSON이라고 임시로 정함
- 3. 곡 개수에 맞는 박스 세팅.
- 4. 박스별로 JSON 결과가 들어가도록 구현
- 5. 박스를 클릭, 선택하면 하단에 기존 제작된 가사 제작기가 나오도록 마이그레이션
- 5-1. 곡 이름에 박스에 담긴 정보로 값이 들어가도록
- 5-2. 사람이 좌측에 곡들을 눌러서 마음에 드는 것을 고르고 ‘변환’ 을 누른다면 우측에 송폼 생성.
--- LLM 호출 ---
(박스 내부에 있는 송폼 별 가사 앞글자 10개와 사용자가 방금 선택한 전체 가사 비교 후 파트 삽입)
- 5-2-1. (자동) 송폼 전체 순서 입력
- 5-2-2. (자동) 파트별 가사 전체 입력
- 6. 사용자가 눈으로 훑어보고 추출 누를 수 있도록 제작
시행착오
-
pdf2image
- poppler 설치
brew install poppler
- poppler 설치